#ifndef EVENT_TO_CALLBACK_H
#define EVENT_TO_CALLBACK_H

namespace Net{

    //用来记录在EventDispatcher里的事件描述和事件对应的回调
    //一般情况的顺序为下为：
    //  1.通过Fd找到EventToCallback.
    //  2.通过EventToCallback调用IEventCallback的接口
    //  
    struct EventToCallback{

        EventToCallback();
        EventToCallback(int fd, int event,IEventCallback* callback);

        //当前保存到EventDispatcher里的Fd
        int                 Fd;             
        //当前事件所对应的IEventCallback指针
        IEventCallback*     pCallback;      
        //在EventDispatcher里注册的事件
        int                 EventMask;  
        //EventDispatcher返回的事件
        int                 EventAsserted;
    };

    inline EventToCallback::EventToCallback()
        :Fd(-1), pCallback(0), EventMask(0), EventAsserted(0)
    {
    }

    inline EventToCallback::EventToCallback(int fd, int event,
            IEventCallback* callback)
        :Fd(fd), pCallback(callback), EventMask(event),EventAsserted(0)
    {
    }

    //用在hashmap的hash函数
    struct EventToCallbackHash{
        size_t operator()(const EventToCallback& obj) const{
            return static_cast<size_t>( obj.Fd );
        }
    }


}
#endif
